package minix.pages;

import java.util.ArrayList;
import java.util.List;

import minix.entities.Bilde;
import minix.entities.Profil;

import org.apache.tapestry5.annotations.Log;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.hibernate.annotations.CommitAfter;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import org.slf4j.Logger;
import org.springframework.security.core.context.SecurityContextHolder;

/**
 * Start page of application pasienlosjen_web.
 */
public class Profiler {
	@Property
	private Profil profil;
	@Property
	private List<Profil> profiler;
	@SuppressWarnings("unused")
	@Property
	private Bilde bilde;
	@Inject
	private Logger logger;
	@Inject
	private Session session;
	private Profil minProfil;

	@SuppressWarnings("unchecked")
	@CommitAfter
	void onActivate() {
		profiler = new ArrayList<Profil>();
		finnMinProfil();
		// opprettStandardmedlemmerDersomDetIkkeLiggerNoenInneIDatabasen();
		profiler.addAll(session.createCriteria(Profil.class).add(Restrictions.eq("medlem", true)).list());
	}

	private void finnMinProfil() {
		String brukernavn = SecurityContextHolder.getContext().getAuthentication().getName();
		minProfil = (Profil) session.createCriteria(Profil.class).add(Restrictions.eq("brukernavn", brukernavn))
				.uniqueResult();
		logger.debug("__________________________minProfil er " + minProfil);
		if (minProfil == null) {
			profil = new Profil();
			profil.setBrukernavn(brukernavn);
			profil.setOverskrift("Dette er din profil, men du har ikke lagt inn noen informasjon om deg selv enda.");
			profil.setNyProfil(true);
			profiler.add(profil);
		}
	}

	private void opprettStandardmedlemmerDersomDetIkkeLiggerNoenInneIDatabasen() {
		if (session.createCriteria(Profil.class).list().size() <= 0) {
			profil = new Profil();
			profil.setOverskrift("Nils Christian");
			profil.setTekst("Nilsemannen");
			Bilde bilde = new Bilde();
			bilde.setBildetekst("Her er en bildetekst");
			bilde.setBilde("bilder/Nils.jpg");
			profil.addBilde(bilde);
			profil.setMedlem(true);
			session.persist(profil);
			profil = new Profil();
			profil.setOverskrift("Trond Hauso");
			profil.setTekst("En eller annen tekst om Trond");
			bilde = new Bilde();
			bilde.setBildetekst("bildetekst");
			bilde.setBilde("bilder/Trond.jpg");
			profil.addBilde(bilde);
			profil.setMedlem(true);
			session.persist(profil);
			profil = null;
		}
	}

	@Log
	public boolean getKanRedigere() {
		String brukernavn = SecurityContextHolder.getContext().getAuthentication().getName();
		if (profil.getBrukernavn() == null)
			return false;
		return profil.getBrukernavn().equals(brukernavn);
	}

	@Log
	public boolean getNyProfil() {
		return profil.isNyProfil();
	}
}
